const path = require('path')

Date.prototype.Format = function (fmt = 'yyyy-MM-dd HH:mm:ss') {
  let self = this;
  var o = {
    'M+': () => self.getMonth() + 1, // 月
    'd+': () => self.getDate(), // 日
    'h+': () => { // 12 小时制
      let h = self.getHours();
      return h <= 12 ? h : h - 12;
    }, // 时
    'H+': () => self.getHours(), // 24小时制
    'm+': () => self.getMinutes(), // 分
    's+': () => self.getSeconds(), // 毫秒
    'S': () => self.getMilliseconds(), // 秒
    'q+': () => Math.floor((self.getMonth() + 3) / 3), // 月中第几周
    'e': () => self.getDay(), // 周中星期几
    'E': () => ['日', '一', '二', '三', '四', '五', '六'][self.getDay()],
    'a': () => (self.getHours() <= 12 ? 'AM' : 'PM'), // 上下午
    'A': () => (self.getHours() <= 12 ? '上午' : '下午') // 上下午
  };

  if (/(y+)/.test(fmt)) {
    fmt = fmt.replaceAll(RegExp.$1, (self.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  for (var k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      let val = o[k] instanceof Function ? (o[k] = o[k]()) : o[k];
      fmt = fmt.replaceAll(RegExp.$1, (RegExp.$1.length === 1) ? (val) : (('00' + val).substr(('' + val).length)));
    }
  }
  return fmt;
};


/**
 * 通过参数名称替换参数
 * 'ab{p1}{p2}}'.format2({p1: 'c', p2: 'd'}) ==> abcd
 * @param {Object} obj 
 * @returns 
 */
String.prototype.format2 = function (obj) {
  var s = this;
  for (var i in obj) {
    s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), obj[i]);
  }
  return s;
};


function requireModule(mod){
  let modPath = path.resolve(process.cwd(), 'node_modules', mod)
  return require(modPath);
}

module.exports = {
  requireModule
}